// gorpc/common/errors.go

package common

import "fmt"

// 错误码定义（修改常量名为ErrorCode前缀）
const (
	ErrorCodeFramework       = 1000 + iota // 框架错误
	ErrorCodeConnection                    // 连接错误
	ErrorCodeNetwork                       // 网络错误
	ErrorCodeSerialization                 // 序列化错误
	ErrorCodeServiceNotFound               // 服务未找到
	ErrorCodeIO                            // IO操作错误
	ErrorCodeTimeout                       // 超时错误
)

// RPCError 结构体名称改为RPCError（更明确的命名）
type RPCError struct {
	Code    int    // 错误码
	Message string // 错误信息
	Cause   error  // 原始错误
}

// 实现error接口
func (e *RPCError) Error() string {
	if e.Cause != nil {
		return fmt.Sprintf("RPCError[%d]: %s (cause: %v)", e.Code, e.Message, e.Cause)
	}
	return fmt.Sprintf("RPCError[%d]: %s", e.Code, e.Message)
}

// NewRPCError 构造新错误（函数名同步修改）
func NewRPCError(code int, msg string, cause error) *RPCError {
	return &RPCError{
		Code:    code,
		Message: msg,
		Cause:   cause,
	}
}

// 常用错误快捷构造
var (
	ErrServiceNotFound = NewRPCError(
		ErrorCodeServiceNotFound,
		"service not found",
		nil,
	)

	ErrConnectionFailed = NewRPCError(
		ErrorCodeConnection,
		"connection failed",
		nil,
	)

	ErrTimeout = NewRPCError(
		ErrorCodeTimeout,
		"request timeout",
		nil,
	)
)
